package com.lg.concurrent.volatile_detail;

/**
 * java 多线程 运行的时候
 * 会将共享变量 从主存中 拷到缓存中一份 过程中不会再去主存中搂一下
 *
 *
 * volatile  可见性  防止指令重排(double check)
 * 可以解决上述问题
 *
 */
public class WhyUse {

    private static boolean flag = false;

    public static void main(String[] args) {


        new Thread(()->{
            System.out.println("wait data change to true");
            System.out.println(flag);
            while (!flag){

            }
            System.out.println("wait data change end");

        }).start();


        try {
            Thread.currentThread().sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(()->{
            System.out.println("change flag to true");
            flag = true;
            System.out.println("change flag end");
        }).start();


        try {
            Thread.currentThread().sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }
}
